# -*- coding: utf-8 -*-

'''
    【简介】 用tkinter开发重命名文件小程序

'''
import csv
import os
import tkinter as tk
from tkinter import filedialog, ttk, messagebox


class GUI:

    def __init__(self):
        self.root = tk.Tk()
        self.root.title('导出文件名小程序')
        self.root.geometry("300x200+1100+150")
        self.interface()

    def interface(self):
        """"界面编写位置"""
        # 文件夹
        self.file_label = tk.Label(self.root, text="文件夹：")
        self.file_label.grid(row=0, column=0)
        self.file_dir = tk.Entry(self.root, font=('宋体', 10), fg='black')
        self.file_dir.grid(row=0, column=1)
        self.file_btn = tk.Button(self.root, text="浏览文件", command=self.get_dir, fg='black')
        self.file_btn.grid(row=0, column=2)

        # 模式
        self.mode_label = tk.Label(self.root, text="模　式：")
        self.mode_label.grid(row=1, column=0)

        self.mode_combobox = ttk.Combobox(
            master=self.root,  # 父容器
            # height=10,  # 高度,下拉显示的条目数量
            width=17,  # 宽度
            state='',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled(禁止输入选择)
            cursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...
            font=('宋体', 10),  # 字体、字号
            # textvariable=self.mode_val,  # 通过StringVar设置可改变的值
            values=['递归', '表层'],  # 设置下拉框的选项
        )
        self.mode_combobox.grid(row=1, column=1)

        # 提交
        self.commit_btn = tk.Button(self.root, text="提交", command=self.run, fg='blue')
        self.commit_btn.grid(row=5, column=1, columnspan=2)

    def get_dir(self):
        '''获取单个文件'''
        file_path = filedialog.askdirectory()
        self.file_dir.delete(0)
        self.file_dir.insert(0, file_path)

    def run(self):
        file_dir = self.file_dir.get()
        success = True
        if not file_dir:
            messagebox.showerror("错误", message='请选择需要操作的文件夹')
            success = False
        mode = self.mode_combobox.get()
        data = []
        if mode == '递归':
            for root, dirs, files in os.walk(file_dir):
                item = [[root, name] for name in files]
                if item:
                    data.extend(item)
        elif mode == '表层':
            data = [[file] for file in os.listdir(file_dir) if os.path.isfile(os.path.join(file_dir, file))]
        else:
            messagebox.showerror("错误", message='请选择正确的操作模式')
            success = False
        if data:
            with open('catalogue.csv', 'w', encoding='utf-8') as f:
                writer = csv.writer(f)
                writer.writerows(data)
            success = True
        if success:
            messagebox.showinfo("成功", message='恭喜！执行成功')
            self.root.destroy()


if __name__ == '__main__':
    gui = GUI()
    gui.root.mainloop()
